package com.piggy.logi.sys.domain;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.piggy.logi.sys.enums.InvoiceStatusEnum;
import com.piggy.logi.sys.enums.InvoiceTypeEnum;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

/**
 * 运单发票对象 logi_waybill_invoice
 *
 * @author fengxy
 * @date 2023/10/17 20:29
 **/
@Data
@NoArgsConstructor
@Accessors(chain = true)
@TableName("logi_waybill_invoice")
public class LogiWaybillInvoice implements Serializable {

    private static final long serialVersionUID=1L;

    /** 主键 */
    @ApiModelProperty("主键")
    @TableId(value = "id")
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    private Long id;

    /** 开票批次编号 */
    @ApiModelProperty("开票批次编号")
    private String batchNo;

    /**
     * 状态：0.开票中 1.已开票 2.已作废
     * @see InvoiceStatusEnum
     **/
    @ApiModelProperty("状态：0.开票中 1.已开票 2.已作废")
    private Integer status;

    /** 部门ID */
    @ApiModelProperty(value = "部门ID")
    private Long deptId;

    /** 运单ID */
    @ApiModelProperty("运单ID")
    private Long waybillId;

    /** 运单编号 */
    @ApiModelProperty(value = "运单编号")
    private String outCode;

    /** 客户ID */
    @ApiModelProperty(value = "客户ID")
    private Long customerId;

    /** 类型：0.电子发票 1.纸质发票
     * @see InvoiceTypeEnum
     **/
    @ApiModelProperty("类型：0.电子发票 1.纸质发票")
    private Integer type;

    /** 公司名称 */
    @ApiModelProperty("公司名称")
    private String companyName;

    /** 公司税号 */
    @ApiModelProperty("公司税号")
    private String companyTaxNo;

    /** 公司地址 */
    @ApiModelProperty("公司地址")
    private String companyAddress;

    /** 公司电话 */
    @ApiModelProperty("公司电话")
    private String companyMobile;

    /** 公司开户行 */
    @ApiModelProperty("公司开户行")
    private String accountBank;

    /** 开户行账号 */
    @ApiModelProperty("开户行账号")
    private String accountNumber;

    /** 总金额 */
    @ApiModelProperty("总金额")
    private BigDecimal totalAmount;

    /** 开票内容 */
    @ApiModelProperty("开票内容")
    private String invoiceContent;

    /** 开票方 */
    @ApiModelProperty("开票方")
    private String invoiceParty;

    /** 发票总额 */
    @ApiModelProperty("发票总额")
    private BigDecimal invoiceTotal;

    /** 数量 */
    @ApiModelProperty("数量")
    private Integer quantity;

    /** 电子邮箱 */
    @ApiModelProperty("电子邮箱")
    private String email;

    /** 备注 */
    @ApiModelProperty("备注")
    private String remark;

    /** 电子发票 */
    @ApiModelProperty("电子发票")
    private String electronInvoice;

    /** 申请时间 */
    @ApiModelProperty("申请时间")
    private Date applyTime;

    /** 删除标志（0代表存在 2代表删除） */
    @ApiModelProperty("删除标志（0代表存在 2代表删除）")
    @TableLogic
    private String delFlag;

    /** 创建者 */
    @ApiModelProperty("创建者")
    private String createBy;

    /** 创建时间 */
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;

    /** 更新者 */
    @ApiModelProperty("更新者")
    private String updateBy;

    /** 更新时间 */
    @ApiModelProperty("更新时间")
    @TableField(fill = FieldFill.INSERT)
    private Date updateTime;

//    public static void main(String[] args) {
//        // 生成电子发票
//        byte[] imageBytes = drawImage(
//                CollUtil.newArrayList("P123456", DateUtil.now(), "潘金亮"),
//                CollUtil.newArrayList(700, 700, 160),
//                CollUtil.newArrayList(67, 83, 122),
//                ResourceUtil.getStream("static/invoice-template.png"));
//        // 将图片转为pdf
//        byte[] pdfBytes = imageToPdf(imageBytes, MediaType.PNG.subtype());
//        // 保存文件
//        assert pdfBytes != null;
//        File file = FileUtil.writeBytes(pdfBytes, FileUtil.createTempFile("invoice", ".pdf", true));
//        System.out.println(file.getAbsolutePath());
//    }
}
